/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MyDataContainer;

import java.util.ArrayList;
import MyDataType.*;
import sun.org.mozilla.javascript.internal.UintMap;
/**
 *
 * @author Welcome
 */
public class MyDataSet {
    //<editor-fold defaultstate="collapsed" desc="1/Các thuộc tính cơ bản">
    private ArrayList<MyData> dataSet;
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="2/ Các phương thức khởi tạo">
    public MyDataSet() {
        this.dataSet=new ArrayList<MyData>();
    }
    
    public MyDataSet(ArrayList<MyData> dataSet) {
        this.dataSet = new ArrayList<MyData>(dataSet);
    }
    
    public MyDataSet(MyDataSet myDataSet)
    {
        this.dataSet=new ArrayList<MyData>(myDataSet.getDataSet());
    }
    
    /**
     * Tao dataSet từ 1 String, vd int-(1200,1300,4500), String-('msv01', 'msv01')
     * @param str
     * @param type 
     */
    public MyDataSet(String str, MyType type)
    {
        dataSet = new ArrayList<MyData>();
        setData(str, type);
    }
    
    /**
     * Tạo dataSet từ 1 mảng String, mảng này đã được chuẩn hóa bỏ ký tự thừa () ' '
     * @param set
     * @param type 
     */
    public MyDataSet(String[] set, MyType type)
    {
        dataSet = new ArrayList<MyData>();
        setData(set, type);
        
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="3/ Các phương thức Getter/Setter">
    public ArrayList<MyData> getDataSet() {
        return dataSet;
    }
    
    public void setDataSet(ArrayList<MyData> dataSet) {
        this.dataSet = dataSet;
    }
    
    public int getSize()
    {
        return dataSet.size();
    }
    
    /**
     * Lấy data ở vị trí index
     * @param index
     * @return 
     */
    public MyData getDataAt(int index)
    {
        return dataSet.get(index);
    }
    
    /**
     * Set Data từ 1 mảng String, mảng này đã được chuẩn hóa bỏ ký tự thừa () ' '
     * @param set
     * @param type 
     */
    public void setData(String[] set, MyType type)
    {
        
        switch (type)
        {
            case INT:
                for(int i=0; i< set.length;i++)
                {
                    MyInt tempInt= new MyInt(set[i]);
                    dataSet.add(tempInt);
                }
                break;
            case STRING:
                for(int i=0; i< set.length;i++)
                {
                    MyString tempString= new MyString(set[i]);
                    dataSet.add(tempString);
                }
                break;
            case DATE:
                break;
                
            default: 
            {
                System.out.println("Data type chua duoc ho tro");
                return;
            }
        }
    }
    
    /**
     * Set Data từ 1 String, vd int-(1200,1300,4500), String-('msv01', 'msv01')
     * @param str phải đúng cú pháp dạng (....)
     * @param type 
     */
    public void setData(String str, MyType type)
    {
        //Loai bỏ dấu ()
        String tempString = str.substring(1,str.length()-1);
        
        String[] strList = tempString.split(",");
        
        //Loai bo cap dau ' '
        if(type ==MyType.STRING)
        {
            for(int i=0;i<strList.length;i++)
                strList[i]=strList[i].substring(1, strList[i].length()-1);
        }
        
        setData(strList, type);
    }
    
    public void setData(MyData myData)
    {
        dataSet.add(myData);
    }
    
    
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="4/ Các phương thức xử lý nghiệp vụ">
    public void addData(MyData myData)
    {
        dataSet.add(myData);
    }
    
    public void addData(MyDataSet rowDataSet) {
        for(int i=0; i<rowDataSet.getSize();i++)
        {
            dataSet.add(rowDataSet.getDataAt(i));
        }
    }
    
    public void showData()
    {
        for(int i=0; i<dataSet.size();i++)
        {
            dataSet.get(i).showData();
        }
    }
    
    public boolean isEqual(MyDataSet pattern)
    {
        try
        {
            ArrayList<MyData> tempDataSets = pattern.getDataSet();
            boolean flag = true;
            for(int i=0; i<dataSet.size();i++)
            {
                boolean temp = dataSet.get(i).comparisonWith(tempDataSets.get(i), "=");
                if(temp==false)
                    return false;
            }
            return flag;
        }catch (Exception exception)
        {
            return false;
        }
    }
    
    public boolean isIN(MyData myData)
    {
        boolean result = false;
        //MyType type = myData.getType();
        
        for(int i=0; i<this.dataSet.size();i++)
        {
            if(dataSet.get(i).comparisonWith(myData, "=")==true)
                return true;
        }
        return result;
    }
    
    public String[] getData()
    {
        String[] result = new String[dataSet.size()];
        for(int i=0; i<dataSet.size();i++)
        {
            result[i] = dataSet.get(i).getContent();
        }
        
        return result;
    }
    //</editor-fold>

    
}
